package org.persistente.banco;

import java.sql.Connection;
import java.sql.SQLException;

/**
 *
 * @author phireis
 */
public class GerenciadorConexoes {

    
    private FonteConexao fonteConexao;
    private ThreadLocal<Connection> conexoes = new ThreadLocal<Connection>();

    
    public GerenciadorConexoes(FonteConexao fonteConexao) {
        this.fonteConexao = fonteConexao;
    }

    public Connection getConexao() {
        return fonteConexao.getConexao();
    }


    public Connection abreTransacao(){
        Connection con = getConexao();
        conexoes.set(con);
        try {
            con.setAutoCommit(false);
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return con;
    }

    public void fechaTransacao(){
        Connection con = conexoes.get();
        if(con != null){
            Conexoes.fecha(con);
            conexoes.remove();
        }
    }

    public Connection iniciaOperacao(){
        Connection con = conexoes.get();
        if(con == null){
            return getConexao();
        }
        return con;
    }

    public void terminaOperacao(Connection con){
        if(conexoes.get() != con){
            Conexoes.fecha(con);
        }
    }

    public FonteConexao getFonteConexao() {
        return fonteConexao;
    }



}
